﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Interfaces;
using Persistencia;


namespace Dominio
{
    public class Tanque:ObjetoPersistible,IObservable
    {
        public int idTanque { get; set; }
        private static int _idTanque=1;
        public String Descripcion { get; set; }
        public int Capacidad { get; set; }
        public int LitrosDisponibles { get; set; }
        private List<IObservador> _observadores;
        public List<TareaMantenimiento> Mantenimientos { get; set; }
        public int Borrado { get; set; }
        public int Calidad { get; set; }
        public DateTime FechaCreacion { get; set; }
        public DateTime UltimaFechaLimpieza { get; set; }

        public Tanque()
        {
            this.FechaCreacion = DateTime.Now;
            this.UltimaFechaLimpieza = DateTime.Now;
            _observadores = new List<IObservador>();
        }
        public void AgregarObservador(IObservador obs){
            _observadores.Add(obs);            
        }

        public void QuitarObservador(IObservador obs) {
            _observadores.Remove(obs);
        }

        public void Notificar() {
            foreach (IObservador i in _observadores)
            {
                i.Actualizar();
            }
        }

        public int ObtenerId()
        {
            return _idTanque;
        }

        public void QuitarCombustible(int litros) {
            if (this.LitrosDisponibles > litros)
            {
                this.LitrosDisponibles = LitrosDisponibles - litros;
            }
            else
            {
                this.LitrosDisponibles = 0;
            }
            this.Notificar();
        }

        public void AgregarCombustible(int litros)
        {
            this.LitrosDisponibles = LitrosDisponibles + litros;
            this.Notificar();
        }

        public void AgregarReposicionCombustible(TareaMantenimiento unaTarea)
        {
            this.Mantenimientos.Add(unaTarea);
        }

        public bool LitrosDisponiblesAptoParaLimpieza()
        {
            float porcentajeLitrosDisponibles = (LitrosDisponibles / Capacidad) * 100;
            if (porcentajeLitrosDisponibles < 10)
            {
                return true;
            }
            return false;
        }

        public override string ToString()
        {
            return "Id " + this.idTanque;
        }

    }
}
